package org.dromara.common.web.core;

import org.springframework.web.servlet.LocaleResolver;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.util.Locale;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：获取请求头国际化信息
 */
/**
 * I18nLocaleResolver类实现了LocaleResolver接口，用于根据请求获取Locale对象
 * 以支持国际化功能。该类的主要作用是解析请求以确定适当的Locale设置，
 * 从而使得应用程序能够以用户期望的语言和区域设置来展示内容。
 */
public class I18nLocaleResolver implements LocaleResolver {

    /**
     * 重写以解决用户语言偏好的方法
     * 该方法通过分析HTTP请求头中的"content-language"来确定用户偏好的语言和地区
     * 如果请求头中没有指定语言偏好，则使用系统的默认语言和地区
     *
     * @param httpServletRequest HTTP请求对象，用于获取请求头信息
     * @return 用户偏好的Locale设置，如果请求头中未指定，则返回系统的默认Locale设置
     */
    @Override
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        // 获取请求头中的"content-language"值
        String language = httpServletRequest.getHeader("content-language");
        // 初始化为系统的默认Locale设置
        Locale locale = Locale.getDefault();
        // 如果请求头中指定了语言偏好
        if (language != null && language.length() > 0) {
            // 分割语言偏好值，通常由语言和国家两部分组成，通过下划线分隔
            String[] split = language.split("_");
            // 创建新的Locale设置，基于请求头中的语言和国家信息
            locale = new Locale(split[0], split[1]);
        }
        // 返回用户偏好的Locale设置
        return locale;
    }

    /**
     * 设置语言环境
     *
     * @param httpServletRequest 用于从客户端获取请求信息的Servlet请求对象
     * @param httpServletResponse 用于向客户端发送响应的Servlet响应对象
     * @param locale 要设置的语言环境对象
     *
     * 此方法的目的是根据传入的语言环境参数，更新或设置当前上下文的语言环境
     * 例如，这可能涉及到更改页面上显示的语言或根据语言环境调整其他国际化内容
     * 尽管给定的代码存根中没有实现具体逻辑，但这是处理与语言环境相关请求的重要位置
     *
     * 注意：这是一个覆盖的方法，其行为和目的应该与超类中声明的方法一致
     */
    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }
}
